package com.sh.rpc.registry;

import com.sh.rpc.confige.RegistryConfig;
import com.sh.rpc.model.ServiceMetaInfo;

import java.util.List;

/**
 * 注册中心接口
 * @author sh
 */
public interface Registry {
    /**
     * 初始化
     */
    void init(RegistryConfig registryConfig);

    /**
     * 注册服务：  服务端使用
     */
    void register(ServiceMetaInfo serviceMetaInfo) throws Exception;


    /**
     * 取消注册服务：  服务端使用
     */
    void unregister(ServiceMetaInfo serviceMetaInfo) ;

    /**
     *  获取服务列表||服务发现：  客户端使用
     */
    List<ServiceMetaInfo> serviceDiscovery(String serviceKey);

    /**
     * 销毁服务  关机使用
     */
    void destroy();


    /**
     * 心跳检测    服务端使用
     */
    void heatBeat();

    /**
     * 监听机制
     * 每次服务端注册中心有变化，都会更新客户端走的缓存列表
     */
    void watch(String serviceNodeKey);

}
